package com.Maykk.Demo02;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * @ClassName: Demo01
 * @Description: TODO TreeSet 自定义类的自定义排序
 * @Author: MaykkStar@163.com
 */
public class Demo01 {
    public static void main(String[] args) {
        // TreeSet<Student> ts = new TreeSet<>();
        // TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {
        //     @Override
        //     public int compare(Student o1, Student o2) {
        //         // 根据年龄排序,如果 res == 0 ,就对比姓名, 如果 res != 0 ,返回 res
        //
        //         // return 0;// 0 表示相等，后面的值存入不进去
        //         // return 1; // 大于0，表示o对象比当前的对象大，放到后面
        //         // return -1; // 小于0，表示o对象比当前的对象小，放到前面
        //         int res = o1.getAge() - o2.getAge();
        //         return res == 0 ? o1.getName().compareTo(o2.getName()) : res;
        //     }
        // }); // 通过匿名内部类来实现自定义规则排序


        // TreeSet<Student> ts = new TreeSet<>((o1, o2) -> {
        //     // 根据年龄排序,如果 res == 0 ,就对比姓名, 如果 res != 0 ,返回 res
        //
        //     // return 0;// 0 表示相等，后面的值存入不进去
        //     // return 1; // 大于0，表示o对象比当前的对象大，放到后面
        //     // return -1; // 小于0，表示o对象比当前的对象小，放到前面
        //     int res = o1.getAge() - o2.getAge();
        //     return res == 0 ? o1.getName().compareTo(o2.getName()) : res;
        // }); // 通过lambda来实现自定义规则排序
        // 根据年龄排序,如果 res == 0 ,就对比姓名, 如果 res != 0 ,返回 res
        // return 0;// 0 表示相等，后面的值存入不进去
        // return 1; // 大于0，表示o对象比当前的对象大，放到后面
        // return -1; // 小于0，表示o对象比当前的对象小，放到前面

        // 通过 Comparator 来自定义排序规则
        TreeSet<Student> ts = new TreeSet<>(Comparator.comparingInt(Student::getAge).thenComparing(Student::getName)); // 通过匿名内部类来实现自定义规则排序
        ts.add(new Student("Andy", 29));
        ts.add(new Student("Jack", 39));
        ts.add(new Student("Lily", 19));
        ts.add(new Student("Tom", 49));
        ts.add(new Student("Lucy", 19));
        for (Student stu : ts) {
            System.out.println(stu);
        }
    }
}
